Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: DS1987   发起时间: 2012-07-06 12:07 下午   回复: 0

Print Search
帖子排序:    
   2012-07-06, 12:07 下午
PoorGuy 离线,最后访问时间: 2012/7/6 3:20:57 DS1987

无等级
注册: 2012-07-06
发 贴: 1
Embarrassed [:$] 卸载驱动时unhook debug handler和恢复DRx后,触发了递归KiTrap01导致栈溢出蓝屏
Reply Quote
请教下大家:(特别是张老师)
这个问题折磨了我快2个星期了。我使用了5份代码,全部存在这个问题。(2份中国人的代码,3份老外的代码)

我要干什么:
我要hook idt的1号入口(debug handler),然后设置DR0寄存器设置一个硬件断点,(为了防止被清,我开启了DR7的GD位)
在卸载的时候,我先恢复DRx寄存器,然后unhook int 1,但是我发现winlogon进程的一个线程访问fs:[0]时触发了1号中断,而KiTrap01的入口处也有访问fs:[0]的代码(看wrk知道是保存exceptionlist表头指针),这样就无限递归了。。蓝屏(蓝屏后,windbg里查看drx寄存器,发现dr0-7都是乱七八糟的值,为啥DRx居然没有被清掉?)

我感到非常惊悚的事情:
1.为什么访问fs:[0]会触发int 1中断。。。??太不可思议了吧
2.为什么蓝屏时(处于winlogon进程),drx寄存器至少dr0寄存器不是0?要知道我卸载时是恢复了dr0的(考虑了SMP的)
3.在Ring0,DRx应该是和CPU相关的吧,应该和线程没关系吧,看intel手册是这么说的啊,那为啥会出现上面惊悚的第二条情况?
4.为什么每次都是蓝在了winlogon进程?和线程切换有关系吗?

我贴一下我最后使用的代码:(最后用的是一个韩国人的代码,感觉算是写的好点的)
http://chpie.tistory.com/entry/KeyboardHook

请大家给指点下,谢谢

PS。这份韩国人的代码内提供了编译好了的exe和sys,我直接测试它的程序,在某些xp机器上也会卸载蓝屏(也是winlogon进程导致的KiTrap01栈溢出)

IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » 卸载驱动时unhook debug handler和恢复DRx后,触发了递归KiTrap01导致栈溢出蓝屏

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.